//package com.ruoyi.common.sdk.dxlogin;
//
//import com.alibaba.fastjson.JSONObject;
//import com.ctsi.ssdc.thirdauth.tianyi.utils.*;
//import com.ctsi.ssdc.thirdauth.tianyi.utils.cipher.RSAUtils;
//import com.ruoyi.common.sdk.dxlogin.bean.AccessTokenResBean;
//import com.ruoyi.common.sdk.dxlogin.bean.ParasResBean;
//import org.springframework.stereotype.Service;
//
//import java.util.HashMap;
//import java.util.Locale;
//import java.util.Map;
//
//@Service
//public class TYLoginService {
//
//    public String doCreateLoginUrl() {
//        JSONObject parasParam = new JSONObject();
//        /**
//         * 时间戳，毫秒
//         */
//        parasParam.put("timeStamp", System.currentTimeMillis());
//        /**
//         * 重定向返回URL（returnURL如带参数，整个returnURL需进行URL编码）
//         */
//        parasParam.put("returnURL", StringUtil.getUrlEncodeStr(DxLoginConfig.RETURN_URL));
//        /**
//         * 模板ID，若需新增模板，需提供模板给予综合平台进行模板配置，默认：0
//         */
//        parasParam.put("templateId", DxLoginConfig.TEMPLATE_ID);
//
//        String paras;
//        try {
//            paras = XXTea.encrypt(FormatUtil.json2UrlParam(parasParam.toString(), false, null), DxLoginConfig.CHARSET, StringUtil.toHex(DxLoginConfig.APP_SECRET,
//                    DxLoginConfig.CHARSET));
//        } catch (Exception e) {
//            paras = "";
//        }
//
//        String sign;
//        try {
//            sign = HMACSHA1.getSignature(DxLoginConfig.APP_ID + DxLoginConfig.CLIENT_TYPE_WAP + DxLoginConfig.FORMAT_LOGIN + DxLoginConfig.VERSION_WAP + paras,
//                    DxLoginConfig.APP_SECRET).toUpperCase(Locale.getDefault());
//        } catch (Exception e) {
//            sign = "";
//        }
//
//        JSONObject req = new JSONObject();
//        req.put("appId", DxLoginConfig.APP_ID);
//        req.put("clientType", DxLoginConfig.CLIENT_TYPE_WAP);
//        req.put("format", DxLoginConfig.FORMAT_LOGIN);
//        req.put("version", DxLoginConfig.VERSION_WAP);
//        req.put("paras", paras);
//        req.put("sign", sign);
//
//        return DxLoginConfig.AUTO_LOGIN_URL + "?" + FormatUtil.json2UrlParam(req.toString(), false, null);
//    }
//
//    /**
//     * 登录回调数据解析获取code
//     * @param RSAString
//     * @return
//     */
//    public ParasResBean getCode(String RSAString) throws Exception {
//        String decrypt = XXTea.decrypt(RSAString, DxLoginConfig.CHARSET, StringUtil.toHex(DxLoginConfig.APP_SECRET,
//                DxLoginConfig.CHARSET));
//
//        ParasResBean res = new ParasResBean();
//        String[] params = decrypt.split("&");
//        for (String param : params) {
//            String[] ps = param.split("=");
//            switch (ps[0]){
//                case "result":
//                    res.setResult(ps.length <= 1 ? null : ps[1]);
//                    break;
//                case "timeStamp":
//                    res.setTimeStamp(ps.length <= 1 ? null : ps[1]);
//                    break;
//                case "accessToken":
//                    res.setCode(ps.length <= 1 ? null : ps[1]);
//                    break;
//                case "state":
//                    res.setState(ps.length <= 1 ? null : ps[1]);
//                    break;
//                default:
//                    break;
//            }
//        }
//        return res;
//    }
//
//    /**
//     * 获取 accesstoken
//     * @param code
//     * @return
//     */
//    public AccessTokenResBean getAccessToken(String code) throws Exception {
//        if(StringUtil.isEmpty(code)) throw new RuntimeException("缺少code");
//
//        String resp = HttpUtil.doHttpPost(doCreateAccessTokenUrl(code), new HashMap<>(0));
////        System.out.println(resp);
//        AccessTokenResBean accessTokenResBean = JSONObject.parseObject(resp, AccessTokenResBean.class);
//
////        //取号结果需要RSA解密
////        JSONObject respObj = JSONObject.parseObject(resp);
////        if(0 == respObj.getInteger("result")) {
////            String encData = respObj.getString("data");
////            //使用RSA私钥解密encData
////            String finalData = RSAUtils.decryptByPrivateKeyForLongStr(encData, DxLoginConfig.PRI_KEY);
////            System.out.println(finalData);
////            return finalData;
////        }
//        return accessTokenResBean;
//    }
//
//    /**
//     * 获取用户信息
//     * @param accessToken
//     * @return
//     * @throws Exception
//     */
//    public JSONObject getUserInfo(String accessToken) throws Exception {
//        Map<String, String> generalParamsMap = new HashMap<>(0);
//        Map<String, String> businessParamsMap = new HashMap<>(0);
//        businessParamsMap.put("accessToken", accessToken);
//
//        String params = RequestUtil.generateParams(businessParamsMap, DxLoginConfig.APP_SECRET);
//        generalParamsMap.put("clientId", DxLoginConfig.APP_ID);
//        generalParamsMap.put("timeStamp", String.valueOf(System.currentTimeMillis()));
//        generalParamsMap.put("format", DxLoginConfig.FORMAT_JSON);
//        generalParamsMap.put("params", params);
//        String sign = RequestUtil.generateSign(generalParamsMap, DxLoginConfig.PRI_KEY);
//        generalParamsMap.put("sign", sign);
//
//        StringBuffer sb = new StringBuffer();
//        for(Map.Entry<String, String> entry : generalParamsMap.entrySet()){
//            sb.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
//        }
////        System.out.println(DxLoginConfig.GET_USER_INFO_URL + "?" + sb.toString());
//
//        String resp = HttpUtil.doHttpPost(DxLoginConfig.GET_USER_INFO_URL, generalParamsMap);
////        System.out.println(resp);
//
//        //取号结果需要RSA解密
//        JSONObject respObj = JSONObject.parseObject(resp);
//        if(0 == respObj.getInteger("result")) {
//            String encData = respObj.getString("data");
//            //使用RSA私钥解密encData
//            String finalData = RSAUtils.decryptByPrivateKeyForLongStr(encData, DxLoginConfig.PRI_KEY);
////            System.out.println(finalData);
//            return JSONObject.parseObject(finalData);
//        }
//
//        return null;
//    }
//
//    public static String doCreateAccessTokenUrl(String code) {
//
//        String sign;
//        try {
//            sign = HMACSHA1.getSignature(DxLoginConfig.APP_ID + code + DxLoginConfig.FORMAT_JSON + DxLoginConfig.AUTHORIZATION_LOGIN,
//                    DxLoginConfig.APP_SECRET).toUpperCase(Locale.getDefault());
//        } catch (Exception e) {
//            sign = "";
//        }
//
//        JSONObject req = new JSONObject();
//        req.put("appId", DxLoginConfig.APP_ID);
//        req.put("grantType", DxLoginConfig.AUTHORIZATION_LOGIN);
//        req.put("format", DxLoginConfig.FORMAT_JSON);
//        req.put("code", code);
//        req.put("sign", sign);
//
//        return DxLoginConfig.GET_ACCESSTOKEN_URL + "?" + FormatUtil.json2UrlParam(req.toString(), false, null);
//    }
//}
